#ifndef TRIANGLE_H
#define TRIANGLE_H

#include "Graph.h"

#include <vector>
#include <utility>

using namespace std;

/**
 * Esto es un triangulo.
 * Usado para representar el mapa, y los caminos del escenario.
 */
class Triangle {
    friend void buildGraphFromTriangles();

	private:
        // Lo modelamos como un vector [3] por compactibilidad
        vector<pair<float, float> >points;

        // ID del nodo asociado al triangulo
        Node *node;

	public:
		Triangle(
                float x1, float y1,
                float x2, float y2,
                float x3, float y3);

		~Triangle();

        /**
         * Obtenemos un punto del triangulo.
         */
        pair<float,float> operator[](int i) const;

        /** Verifica si un triangulo es adyacente a otro */
        bool isAdjacent(Triangle *t);

        /** Verifica si un punto esta en el triangulo */
        bool containPoint(float *p);

        /** Calcula el centro geometrico del triangulo */
        pair<float, float> getCenter();
};

extern vector<Triangle *> triangles;

void buildGraphFromTriangles();

#endif
